#include"TaskQenen.h"
TaskQenen::TaskQenen(size_t size)
:queSize(size)
,_mtuex()
,notEmpty(_mtuex)
,notFull(_mtuex)
{}

TaskQenen::~TaskQenen(){cout<<"~TaskQeuen"<<endl;}
bool TaskQenen::Empty(){
    return 0 == _que.size();
}
bool TaskQenen::Full(){
    return queSize == _que.size();
}

void TaskQenen::push(int value){
    //上锁
    _mtuex.lock();
    //判断是否满
    while (Full())
    {
        notFull.wait();
    }
    
    //如果没有满
    //添加
    _que.push(value);
    //解锁
    notEmpty.notify();
    _mtuex.unlock();
    //通知
    //notEmpty.notify(); error
    
}

int TaskQenen::pop(){
    _mtuex.lock();
    //判断是不是空
    while (Empty())
    {
        notEmpty.wait();
    }
    //如果不是空
    int temp = _que.front();
    _que.pop();
    notFull.notify();
    _mtuex.unlock();
    return temp;
    
}